#ifndef GOBANG_H
#define GOBANG_H

#include <QWidget>
#include <QMouseEvent>
#include <QPainter>

class Gobang : public QWidget
{
    Q_OBJECT

public:
    Gobang(QWidget *parent = nullptr);
    ~Gobang();

protected:
    void paintEvent(QPaintEvent *event) override;
    void mousePressEvent(QMouseEvent *event) override;

private:
    void drawBoard(QPainter &painter);
    void drawPieces(QPainter &painter);
    void aiMove();
    bool checkWin(int x, int y);
    bool hasNeighbor(int x, int y);
    int evaluatePosition(int x, int y);
    int countConsecutive(int x, int y, int dx, int dy, int player);
    void resetGame();
    int minimax(int depth, int alpha, int beta, bool maximizingPlayer);
    int evaluateBoard();             // 评估当前棋盘得分
    QVector<QPoint> generateMoves(); // 生成有效落子位置

    int board[15][15]; // 15x15的棋盘，0表示空，1表示玩家，2表示AI
    bool playerTurn;   // 玩家先手
    bool gameOver;     // 游戏是否结束
    const int MAX_DEPTH = 3; // 搜索深度（越大越智能，但越慢）
    QPoint lastMove;
};

#endif // GOBANG_H